The encoding and transmission of video streams over computer networks is a difficult and important problem. High-definition and high frame rate video content can consume large amounts of network bandwidth when transmitted over computer networks. When received and processed by a recipient, large amounts of processing power may be required to decode and display the received video. The high demands of transmitting and processing video streams constrains the use of high-quality video on many devices such as mobile devices which may have limited network bandwidth and/or limited processing power. Some devices include a graphics processing unit (“GPU”) that provides dedicated video processing capabilities, but many devices still lack such specialized hardware due to cost, space, or power constraints.
One environment in which the challenges related to video processing are particularly prevalent is a remotely-hosted virtual-machine environment. In a remotely-hosted virtual-machine environment, a large number of virtual machines can be hosted on a hardware platform that does not include a physical GPU for each hosted virtual machine. A remotely hosted virtual machine can export video to a remote display, but without access to a physical GPU, the virtual machine encodes the outgoing video with general purpose processing resources. Excessive use of general purpose processing resources for video stream processing can have an adverse effect on the execution of user processes, applications, and overall system responsiveness.